/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ua.ad.feedsreader.actions;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.ibatis.session.SqlSession;
import org.apache.struts2.interceptor.SessionAware;
import org.codehaus.plexus.util.StringUtils;

import ua.ad.feedsreader.mybatis.config.MyBatisSqlSessionFactory;
import ua.ad.feedsreader.mybatis.mappers.beans.Categoria;
import ua.ad.feedsreader.mybatis.mappers.beans.Feed;
import ua.ad.feedsreader.mybatis.mappers.beans.FeedUtilizador;
import ua.ad.feedsreader.mybatis.mappers.beans.PalavraChave;
import ua.ad.feedsreader.mybatis.mappers.beans.UserCategoriaPalavra;
import ua.ad.feedsreader.mybatis.mappers.beans.Utilizador;
import ua.ad.feedsreader.mybatis.mappers.clients.CategoriaMapper;
import ua.ad.feedsreader.mybatis.mappers.clients.FeedMapper;
import ua.ad.feedsreader.mybatis.mappers.clients.FeedUtilizadorMapper;
import ua.ad.feedsreader.mybatis.mappers.clients.PalavraChaveMapper;
import ua.ad.feedsreader.mybatis.mappers.clients.UserCategoriaPalavraMapper;
import axis2consumer.ws.ConsumerWs;

import com.opensymphony.xwork2.ActionSupport;

/**
 *
 * @author sexta13
 */
public class AdicionarCategoriaAction extends ActionSupport implements SessionAware {

    /**
	 * 
	 */
	private static final long serialVersionUID = -4056944775170735207L;
	private static final Logger LOGGER = Logger.getLogger(AdicionarCategoriaAction.class.getName());
	
	private Map<String, Object> session;
    private List<String>lstPalavrasChave;
    private String nomeCategoria;
    private String urlRSS;


    @Override
    public String execute() throws Exception {

        Date now = new Date();
        Utilizador userSession = (Utilizador) getSession().get("utilizador");

        
        SqlSession bdSession = MyBatisSqlSessionFactory.getSqlSessionFactory().openSession();
        
        CategoriaMapper catMapper = bdSession.getMapper(CategoriaMapper.class);
        PalavraChaveMapper pcMapper = bdSession.getMapper(PalavraChaveMapper.class);
        UserCategoriaPalavraMapper ucpMapper = bdSession.getMapper(UserCategoriaPalavraMapper.class);
        FeedMapper fMapper = bdSession.getMapper(FeedMapper.class);
        FeedUtilizadorMapper fuMapper = bdSession.getMapper(FeedUtilizadorMapper.class);
        
        FeedUtilizador fu = null;
        if( StringUtils.isNotBlank( getUrlRSS() ) ) {
        	
        	//adicionar RSS FEED
        	Feed f = new Feed();
        	f.setDataCriacao(now);
        	f.setEstado(1);
        	f.setDescricao("");
        	f.setIdUtilizadorCriacao(userSession.getId());
        	f.setUrl(getUrlRSS());
        	
        	fMapper.insertSelective(f);
        	
        	ConsumerWs wsConsumer = new ConsumerWs();
        	Integer loadFeed = wsConsumer.getConsumerWsHttpSoap11Endpoint().loadFeed( f.getId() );
        	LOGGER.log(Level.INFO, "From: new entry:" + loadFeed );
        	
        	//associar feed ao utilizador
        	fu = new FeedUtilizador();
        	fu.setIdFeed( f.getId() );
        	fu.setIdUtilizador( userSession.getId() );
        	fu.setDataCriacao( now );
        	fu.setEstado( 1 );
        	
        	fuMapper.insertSelective(fu);
        	
        }
        
        if( StringUtils.isNotBlank( getNomeCategoria() ) ) {
        	//adicionar categoria
        	Categoria cat = new Categoria();
        	cat.setDataCriacao(now);
        	cat.setEstado(1);
        	cat.setNome( getNomeCategoria() );
        	catMapper.insertSelective( cat );
        	
        	if( lstPalavrasChave.size() > 0 ) {
	        	for( String pcOption : getLstPalavrasChave() ) {
	        		PalavraChave pc = new PalavraChave();
	        		pc.setDataCriacao( now );
	        		pc.setEstado( 1 );
	        		pc.setNome( pcOption );
	        		
	        		pcMapper.insertSelective( pc );
	        		
	        		UserCategoriaPalavra ucp = new UserCategoriaPalavra();
	        		ucp.setDataCriacao( now );
	        		ucp.setEstado( 1 );
	        		ucp.setIdCategoria( cat.getId() );
	        		ucp.setIdPalavraChave( pc.getId() );
	        		ucp.setIdUtilizador( userSession.getId() );
	        		
	        		if( fu!=null ) {
	        			ucp.setIdFeedUtilizador( fu.getId() );
	        		}
	        		
	        		ucpMapper.insertSelective( ucp );
	        	}
        	} else {
        		
        		PalavraChave pc = new PalavraChave();
        		pc.setDataCriacao( now );
        		pc.setEstado( 1 );
        		pc.setNome( getNomeCategoria() );
        		
        		pcMapper.insertSelective( pc );
        		
        		UserCategoriaPalavra ucp = new UserCategoriaPalavra();
        		ucp.setDataCriacao( now );
        		ucp.setEstado( 1 );
        		ucp.setIdCategoria( cat.getId() );
        		ucp.setIdPalavraChave( pc.getId() );
        		ucp.setIdUtilizador( userSession.getId() );
        		
        		if( fu!=null ) {
        			ucp.setIdFeedUtilizador( fu.getId() );
        		}
        		
        		ucpMapper.insertSelective( ucp );
        	}
        }
        
        bdSession.close();

        return SUCCESS;
    }
    
    
    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    public Map<String, Object> getSession() {
        return session;
    }

    public List<String> getLstPalavrasChave() {
        return lstPalavrasChave;
    }

    public void setLstPalavrasChave(List<String> lstPalavrasChave) {
        this.lstPalavrasChave = lstPalavrasChave;
    }
   
    public String getNomeCategoria() {
        return nomeCategoria;
    }

    public void setNomeCategoria(String nomeCategoria) {
        this.nomeCategoria = nomeCategoria;
    }

    public String getUrlRSS() {
        return urlRSS;
    }

    public void setUrlRSS(String urlRSS) {
        this.urlRSS = urlRSS;
    }
    
}
